#include <stdio.h>      // fgets
#include <stdlib.h>     // atoi
#include <string.h>     // strtok

int main() {
    // step 1# 读取输入的两行字符串
    char line1[1000], line2[10];             // line1 存储数字数组字符串，line2 存储目标值字符串
    fgets(line1, sizeof(line1), stdin);      // 读取第一行输入（数字列表）
    fgets(line2, sizeof(line2), stdin);      // 读取第二行输入（目标值）

    // step 2# 解析 line1 中的数字字符串为整数数组
    int nums[200], n = 0;                    // nums 存储解析后的整数，n 是数组长度
    char *token = strtok(line1, ",");        // 用逗号分割字符串，获取第一个数字
    while (token != NULL) {
        nums[n++] = atoi(token);             // 将分割出的字符串转为整数存入 nums
        token = strtok(NULL, ",");           // 继续分割下一个数字
    }

    // step 3# 将目标值字符串转为整数
    int target = atoi(line2);                // target 为目标和

    // step 4# 初始化滑动窗口变量
    int left = 0;                            // left 为窗口左边界
    int right = 0;                           // right 为窗口右边界
    int sum = 0;                             // sum 为当前窗口内数字之和
    int maxLen = -1;                         // maxLen 记录满足条件的最长子数组长度，初始为 -1 表示未找到

    // step 5# 使用滑动窗口查找和为 target 的最长连续子数组
    while (right < n && sum < target) {
        sum += nums[right++];                // 右边界扩展，加入新元素到窗口中

        if (target == sum) {                 // 如果窗口内和正好等于目标值
            maxLen = maxLen > (right - left) ? maxLen : (right - left);  // 更新最大长度
        }

        while (left < right && sum > target) {
            sum -= nums[left++];             // 左边界右移，缩小窗口，直到 sum <= target
        }

        if (target == sum) {
            maxLen = maxLen > (right - left) ? maxLen : (right - left);  // 再次检查窗口和是否等于目标值
        }
    }

    // step 6# 输出结果
    printf("%d\n", maxLen);                  // 输出满足条件的最长连续子数组长度（或 -1 表示无解）
    return 0;
}
